package com.yimu.lib.http.net;

import android.os.AsyncTask;

/**
 * 描述：TODO
 * 创建者：  Churck
 * 创建时间：2017/4/27 11:21
 * 修改者： Churck
 * 修改时间：2017/4/27 11:21
 * 版 本：v1.0
 */

public class HttpAsyncTask <T>extends AsyncTask<T, Integer, T> {
    private HttpListener taskListener;
    public HttpAsyncTask setCallback(HttpListener callback) {
        this.taskListener = callback;
        return this ;
    }
    //执行预处理，它运行于UI线程，可以为后台任务做一些准备工作，比如绘制一个进度条控件。
    @Override
    protected void onPreExecute() {
        if ( taskListener != null ){
            taskListener.start();
        }
    }
    //运行于UI线程，可以对后台任务的结果做出处理，结果就是doInBackground(Params...)的返回值。
    @Override
    protected void onPostExecute(T t) {
        if ( taskListener != null ){
            taskListener.result( t );
        }
    }
    /**
     * 更新子线程进度，运行于UI线程
     * @param values
     */
    @Override
    protected void onProgressUpdate(Integer... values) {
        // Task被取消了，马上退出循环
        if(isCancelled()) return ;
        if ( taskListener != null ){
            taskListener.update( values[0] );
        }
    }
    //运行与后台线程
    @Override
    protected T doInBackground(T... ts) {
        // Task被取消了，马上退出循环
        if(isCancelled()) return null;
        if ( taskListener != null ){
            return (T) taskListener.doInBackground( ts[0] ) ;
        }
        return null;
    }
    /**
     * 更新进度
     * @param progress
     */
    public void updateProgress( int progress ){
        publishProgress(progress);
    }

    /**
     * 取消一个正在执行的任务
     */
    public void cancle(){
        if ( !isCancelled()&&getStatus() == AsyncTask.Status.RUNNING ){
            cancel( true ) ;
        }
    }
}
